<?php
/**
 * 发仔<i@fazi.me> 2018-07-09
 */

namespace app\open\controller;
/**
 * Class Plus
 * @name【6 车辆信息管理】
 * @package app\open\controller
 */
use app\open\model;#调用MODEL
use app\open\validate;#验证
class Plus extends Base
{
    public function _initialize()
    {
        parent::_initialize();
    }

    /**
     * @name【1.1 获取车辆类型】
     * @desc【车辆类型详细的信息】
     * @method【post】
     * @param【_list】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * count $ int $ 100 $ 结果总数 #
     * list $ json $ $ 车辆类型列表 #
     * description $ json $ $ 接口说明
     * 】
     * @table 【p_car_type】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getCarType()
    {
        $data = [];
        //调用集成
        $data['count'] = $this->getCountCommon(new model\CarType());
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\CarType()) : [];
        return $this->res($data);
    }

    /**
     * @name【1.2 添加车辆类型 】
     * @desc【】
     * @method【post】
     * @group【car_type】
     * @table【car_type】
     * @except【PK】
     * @param【】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * count $ int $ 100 $ 结果总数 #
     * list $ json $ $ 车辆类型列表 #
     * description $ json $ $ 接口说明
     * 】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function addCarType()
    {
        $param = input('post.');
        $rslt = (new model\CarType())->allowField(true)->save($param);

        return $this->res($rslt);
    }

    /**
     * @name【1.3 编辑车辆类型 】
     * @desc【编辑车辆类型详细的信息】
     * @method【post】
     * @group【car_type】
     * @table【car_type】
     * @param【】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * count $ int $ 100 $ 结果总数 #
     * list $ json $ $ 车辆类型列表 #
     * description $ json $ $ 接口说明
     * 】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function editCarType()
    {
        $param = input('post.');
        $rslt = (new model\CarType())->allowField(true)->isUpdate()->save($param);

        return $this->res($rslt);
    }

    /**
     * @name【1.4 删除车辆类型 】
     * @desc【】
     * @method【post】
     * @group【car_type】
     * @table【car_type】
     * @param【
     * ids $ string $ 157,158  $ 类型id #
     * 】
     * @return【
     * code $ int $ number|1-1 $ 标识1-成功 0-失败#
     * msg $ string $  $ code=0，错误信息#
     * count $ int $ 100 $ 结果总数 #
     * list $ json $ $ 车辆类型列表 #
     * description $ json $ $ 接口说明
     * 】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function deleteCarType()
    {
        $rslt = $this->deleteCommon(new model\CarType());
        return $this->res($rslt);
    }

    /**
     * @name【2.1 获取维保信息】
     * @desc【获取维保信息】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【car_maintenance】
     */
    public function getMaintenance()
    {
        $data = [];
        //调用集成
        $data['count'] = $this->getCountCommon(new model\CarMaintenance(),['car','service']);
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\CarMaintenance(),['car','service']) : [];
        return $this->res($data);
    }
    /**
     * @name【2.2 添加维保信息】
     * @desc【】
     * @method【post】
     * @except【PK,state】
     * @param【】
     * @return【】
     * @table 【car_maintenance】
     */
    public function addMaintenance()
    {
        //调用集成
        $rslt = $this->addCommon(new model\CarMaintenance(), new validate\CarMaintenanceValidate());
        return $this->res($rslt);
    }
    /**
     * @name【2.3 编辑维保信息】
     * @desc【】
     * @method【post】
     * @param【】
     * @except【state】
     * @return【】
     * @table 【car_maintenance】
     */
    public function editMaintenance()
    {
        //调用集成
        $rslt = $this->editCommon(new model\CarMaintenance(), new validate\CarMaintenanceValidate());
        return $this->res($rslt);
    }
    /**
     * @name【2.4 删除维保信息】
     * @desc【】
     * @method【post】
     * @param【_delete】
     * @return【】
     * @table 【car_maintenance】
     */
    public function deleteMaintenance()
    {
        //调用集成
        $rslt = $this->deleteCommon(new model\CarMaintenance());
        return $this->res($rslt);
    }

    /**
     * @name【2.5 添加维保审批信息】
     * @desc【】
     * @except【PK】
     * @method【post】
     * @param【】
     * @return【】
     * @table 【car_maintenance_approve】
     */
    public function addMaintenanceApprove()
    {
        //调用集成
        $rslt = $this->addCommon(new model\CarMaintenanceApprove(), new validate\CarMaintenanceApproveValidate());
        //修改审批状态
        $id = input('param.car_maintenance_id');
        $rslt && (new model\CarMaintenance())->pass($id);
        return $this->res($rslt);
    }
    /**
     * @name【2.6 编辑维保审批信息】
     * @desc【】
     * @method【post】
     * @param【】
     * @return【】
     * @table 【car_maintenance_approve】
     */
    public function editMaintenanceApprove()
    {
        //调用集成
        $rslt = $this->addCommon(new model\CarMaintenanceApprove(), new validate\CarMaintenanceApproveValidate());
        return $this->res($rslt);
    }
    /**
     * @name【2.7 获取维保审批信息】
     * @desc【】
     * @method【post】
     * @param【】
     * @return【】
     * @table 【car_maintenance_approve】
     * @author 【yulin<570214321@qq.com>】
     */
    public function getMaintenanceApprove()
    {
        $data = [];
        //调用集成
        $data['count'] = $this->getCountCommon(new model\CarMaintenanceApprove());
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\CarMaintenanceApprove()) : [];
        return $this->res($data);
    }
    /**
     * @name【3.1 获取司机】
     * @desc【】
     * @method【post】
     * @param【_list#
     * car_type_id $ int $ 132 $ 司机绑定车辆的车型 #
     * car_number $ int $ 闽C $ 司机绑定车辆的车牌 #
     * 】
     * @return【】
     * @table 【driver】
     */
    public function getDriver()
    {

        $data = [];
        //调用集成
        $joins = ['user','company','car'];
        //如果搜索车辆类型
	    $param = input('param.');
	    $whereIn = [];
	    if( !empty($param['car_type_id']) ) {
		    $car_type_id = $param['car_type_id'];
		    $whereIn = ['car.car_id' => ['IN', function($query) use($car_type_id){
		    	$query->name('car')->where('car_type_id',$car_type_id)->field('car_id');
		    }]];
//		    halt($param['where']);
	    }
	    if( !empty($param['car_number']) ) {
		    $car_number = $param['car_number'];
		    $whereIn = ['car.car_id' => ['IN', function($query) use($car_number){
		    	$query->name('car')->whereLike('number',"%$car_number%")->field('car_id');
		    }]];
//		    halt($param['where']);
	    }

        $data['count'] = $this->getCountCommon(new model\Driver(),$joins,$whereIn);
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\Driver(),$joins,[],$whereIn) : [];
        return $this->res($data);
    }
    /**
     * @name【4.4 删除司机】
     * @desc【】
     * @method【post】
     * @param【_delete】
     * @table 【driver】
     * @return【】
     */
    public function deleteDriver()
    {
        //调用集成
        $rslt = $this->deleteCommon(new model\Driver());
        return $this->res($rslt);
    }


    /**
     * @name【4.1 获取服务商】
     * @desc【类型用 get/Index/config base.service_mode获取】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【service】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getService()
    {
        $data = [];
        //调用集成
        $data['count'] = $this->getCountCommon(new model\Service());
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\Service()) : [];
        return $this->res($data);
    }
    /**
     * @name【4.2 添加服务商】
     * @desc【类型用 get/Index/config base.service_mode获取】
     * @method【post】
     * @except【PK】
     * @return【】
     * @table 【service】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function addService()
    {
        //调用集成
        $rslt = $this->addCommon(new model\Service(), new validate\ServiceValidate());
        return $this->res($rslt);
    }
    /**
     * @name【4.3 编辑服务商】
     * @desc【类型用 get/Index/config base.service_mode获取】
     * @method【post】
     * @return【】
     * @table 【service】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function editService()
    {
        //调用集成
        $rslt = $this->editCommon(new model\Service(), new validate\ServiceValidate());
        return $this->res($rslt);
    }
    /**
     * @name【4.4 删除服务商】
     * @desc【类型用 get/Index/config base.service_mode获取】
     * @method【post】
     * @param【_delete】
     * @table 【service】
     * @return【】
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function deleteService()
    {
        //调用集成
        $rslt = $this->deleteCommon(new model\Service());
        return $this->res($rslt);
    }

    /**
     * @name【5.1 获取年检信息】
     * @desc【年检AnnualSurvey】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【car_as】
     */
    public function getAS()
    {

        $joins = ['car'];
//        $model = new model\AnnualSurvey();
        $data = [];
        //调用集成
        $data['count'] = $this->getCountCommon(new model\AnnualSurvey(),['car','service']);
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\AnnualSurvey(),['car','service']) : [];

        return $this->res($data);
    }

    /**
     * @name【5.2 添加年检信息】
     * @desc【年检AnnualSurvey】
     * @method【post】
     * @except【PK】
     * @param【】
     * @return【】
     * @table 【car_as】
     */
    public function addAS()
    {
        $model = new model\AnnualSurvey();
        //1.调用集成
        $rslt = $this->addCommon($model, new validate\AnnualSurveyValidate());
        //2.其他条目失效
        $model = new model\AnnualSurvey();
        $rslt && $model->where('id','<>',$rslt)->where('car_id',input('param.car_id'))->update(['state'=>9]);
        return $this->res($rslt);
    }
    /**
     * @name【5.3 编辑年检信息】
     * @desc【年检AnnualSurvey】
     * @method【post】
     * @param【】
     * @return【】
     * @table 【car_as】
     */
    public function editAS()
    {
        //调用集成
        $list = $this->editCommon(new model\AnnualSurvey(), new validate\AnnualSurveyValidate());
        return $this->res($list);
    }
    /**
     * @name【5.4 删除年检信息】
     * @desc【年检AnnualSurvey】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【car_as】
     */
    public function deleteAS()
    {
        //调用集成
        $list = $this->deleteCommon(new model\AnnualSurvey());
        return $this->res($list);
    }

    /**
     * @name【5.1 获取车辆保险信息】
     * @desc【】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【car_insurance】
     */
    public function getInsurance()
    {
        $data = [];
        //调用集成
        $data['count'] = $this->getCountCommon(new model\CarInsurance(),['car','service']);
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\CarInsurance(),['car','service']) : [];
        return $this->res($data);
    }
    /**
     * @name【5.2 添加车辆保险信息】
     * @desc【】
     * @method【post】
     * @except【PK】
     * @param【】
     * @return【】
     * @table 【car_insurance】
     */
    public function addInsurance()
    {
        //1.调用集成
        $model = new model\CarInsurance();
        $rslt = $this->addCommon($model, new validate\CarInsuranceValidate());
        //2.其他条目失效
        $model = new model\CarInsurance();
        $rslt && $model->where('id','<>',$rslt)->where('car_id',input('param.car_id'))->update(['state'=>9]);
        return $this->res($rslt);
    }
    /**
     * @name【5.3 编辑车辆保险信息】
     * @desc【】
     * @method【post】
     * @param【】
     * @return【】
     * @table 【car_insurance】
     */
    public function editInsurance()
    {
        //1.调用集成
        $model = new model\CarInsurance();
        $rslt = $this->editCommon($model, new validate\CarInsuranceValidate());
        return $this->res($rslt);
    }
    /**
     * @name【5.4 删除车辆保险信息】
     * @desc【】
     * @method【post】
     * @param【_delete】
     * @return【】
     * @table 【car_insurance】
     */
    public function deleteInsurance()
    {
        //1.调用集成
        $model = new model\CarInsurance();
        $rslt = $this->deleteCommon($model);
        return $this->res($rslt);
    }

    /**
     * @name【6.1 获取公司编制列表】
     * @desc【】
     * @method【post】
     * @param【_list】
     * @return【】
     * @table 【company_strength】
     */
    public function getCompanyStrength()
    {
        $data = [];
        $joins = ['company','car'];
        $data['count'] = $this->getCountCommon(new model\CompanyStrength(),$joins);
        $data['data'] = $data['count'] ? $this->getListOrAll(new model\CompanyStrength(),$joins) : [];

        return $this->res($data);

    }

    /**
     * @name【6.2 添加公司编制】
     * @desc【】
     * @method【post】
     * @except【PK】
     * @param【】
     * @return【】
     * @table 【company_strength】
     */
    public function addCompanyStrength()
    {
        //1.调用集成
        $rslt = $this->addCommon(new model\CompanyStrength(), new validate\CompanyStrengthValidate());
        return $this->res($rslt);
    }

    /**
     * @name【6.3 编辑公司编制】
     * @desc【】
     * @method【post】
     * @param【】
     * @return【】
     * @table 【company_strength】
     */
    public function eidtCompanyStrength()
    {
//        $model = new model\CompanyStrength();
        $rslt = $this->editCommon(new model\CompanyStrength(), new validate\CompanyStrengthValidate());
        return $this->res($rslt);
    }
    /**
     * @name【6.4 删除公司编制】
     * @desc【】
     * @method【post】
     * @param【_delete】
     * @return【】
     * @table 【car_insurance】
     */
    public function deleteCompanyStrength()
    {
        //1.调用集成
        $model = new model\CompanyStrength();
        $rslt = $this->deleteCommon($model);
        return $this->res($rslt);
    }
    /**
     * @name【6.5 审核公司编制】
     * @desc【】
     * @method【post】
     * @param【
     * id $ int $ 1 $ 数据ID #
     * state $ int $ 2 $ 审核状态 配置 base.strength_state #
     * reason $ int $ xxx $ 审核理由 #
     * 】
     * @return【】
     * @table 【car_insurance】
     */
    public function auditCompanyStrength()
    {
        $data = $this->getParam(new validate\CompanyStrengthValidate(),'audit');
        $data['audit_time'] = time();
        //1.调用集成
        $model = new model\CompanyStrength();
        $rslt = $model->allowField(['state','reason','audit_time'])->isUpdate()->save($data);
        return $this->res($rslt);
    }
    /**
     * @name【6.6 公司编制绑定车辆】
     * @desc【】
     * @method【post】
     * @param【
     * id $ int $ 1 $ 编制ID #
     * car_id $ int $ 2 $ 车辆ＩＤ base.strength_state #
     * 】
     * @return【】
     * @table 【car_insurance】
     * @throws
     */
    public function bindCompanyStrength()
    {
        $data = $this->getParam(new validate\CompanyStrengthValidate(),'bind');
        //1.调用集成
        $model = new model\CompanyStrength();
        $rslt = $model->bindCar($data);
        return $this->res($rslt);
    }


}